/**
 * @file   typelist_macro.generator.hpp
 * @author wolfhead <wolfhead@wolfhead-laptop>
 * @date   Wed Sep 21 14:16:25 2011
 * 
 * @brief  
 * 
 * 
 */
#ifndef ACAPELLA_TYPELIST_TYPELIST_MACRO_GENERATOR_HPP
#define ACAPELLA_TYPELIST_TYPELIST_MACRO_GENERATOR_HPPx

namespace acapella
{
namespace TL
{
namespace generator
{

void generate_TYPELIST(size_t count)
{
    if (0 == count) return;

    size_t current = 1;
    while (current <= count)
    {
        if (1 == current)
        {
            printf("#define TYPELIST_1(T1) Typelist<T1, NullType>");
        }
        else
        {
            printf("#define TYPELIST_%d(T1", current);
            for (size_t n = 2; n <= current; ++n)
            {
                printf(", T%d", n);
            }
            printf(") Typelist<T1, TYPELIST_%d(T2", current - 1);
            for (size_t n = 3; n <= current; ++n)
            {
                printf(", T%d", n);
            }
            printf(")> ");
        }
        printf("\n");
        ++current;
    }
    return;
}

}//namespace generator
}//namespace TL
}//namespace acapella


#endif

